home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / video / fly8111-.000 / fly8111- / fly8 / MSDOS / grvesa.c < prev    next >
C/C++ Source or Header  |  1979-12-31  |  2KB  |  137 lines

  1. /* --------------------------------- grvesa.c ------------------------------- */
  2.  
  3. /* This is part of the flight simulator 'fly8'.
  4.  * Author: Eyal Lebedinsky (eyal@ise.canberra.edu.au).
  5. */
  6.  
  7. /* VESA/VBE graphics driver, uses low level graphics primitives,
  8.  * 256 colors only. This one is self containes (with vesa.c and vgr.c).
  9. */
  10.  
  11. #undef USECLEAR
  12.  
  13. #include "fly.h"
  14. #include "vesa.h"
  15.  
  16. #include <conio.h>
  17.  
  18.  
  19. #define GRV_STATS    0x0001
  20. #define INITED        0x1000
  21.  
  22. LOCAL_FUNC int FAR
  23. GrvSetPalette (int n, long c)
  24. {
  25.     vesa_palette (n, C_RGB_R (c), C_RGB_G (c), C_RGB_B (c));
  26.     return (0);
  27. }
  28.  
  29. LOCAL_FUNC int FAR
  30. GrvOptions (char *options)
  31. {
  32.     long        temp;
  33.  
  34.     if (get_arg (options, "stats"))
  35.         Gr->flags |= GRV_STATS;
  36.  
  37.     if (!get_narg (options, "shutters=", &temp))
  38.         st.misc[7] = (int)temp;
  39.     else
  40.         st.misc[7] = 0;
  41.  
  42.     return (0);
  43. }
  44.  
  45. LOCAL_FUNC int FAR
  46. GrvInit (DEVICE *dev, char *options)
  47. {
  48.     int    i;
  49.     int    row;
  50.  
  51.     if (GrvOptions (options))
  52.         return (1);
  53.  
  54.     if (0 == dev->sizex || 0 == dev->sizey) {
  55.         LogPrintf ("Bad WxH in .vmd file\n");
  56.         return (1);
  57.     }
  58.  
  59.     if (0 == dev->mode) {
  60.         LogPrintf ("Must have video mode in .vmd file\n");
  61.         return (1);
  62.     }
  63.  
  64.     vesa_init (dev->mode, dev->sizex, dev->sizey, dev->sizex);
  65.  
  66.     if (vSetVisual (0))
  67.         dev->npages = 1;
  68.  
  69.     vSetWriteMode (T_MSET);
  70.     GrvSetPalette (CC_BLACK, C_BLACK);
  71.  
  72.     for (i = 0; i < dev->npages; ++i) {
  73.         vSetActive (i);
  74.         for (row = 0; row < dev->sizey; ++row) {
  75.             Gr->MoveTo (0, row);
  76.             Gr->DrawTo (dev->sizex-1, row, CC_BLACK);
  77.         }
  78.     }
  79.  
  80.     vSetActive (0);
  81.  
  82.     Gr->flags |= INITED;
  83.  
  84.     return (0);
  85. }
  86.  
  87. LOCAL_FUNC void FAR
  88. GrvTerm (DEVICE *dev)
  89. {
  90.     if (!(Gr->flags & INITED))
  91.         return;
  92.     Gr->flags &= ~INITED;
  93.  
  94.     LogPrintf ("BankSwitches %s\n", show_ul (vesa_BankSwitches));
  95.     if (Gr->flags & GRV_STATS)
  96.         LogStats ();
  97.     vesa_term ();
  98. }
  99.  
  100. LOCAL_FUNC int FAR
  101. GrvShutters (int eye)
  102. {
  103.     if (st.misc[7]) {
  104.         if (eye >= 0)
  105.             outp (st.misc[7]+4, 1+2*eye);
  106.         else if (-1 == eye)
  107.             outp (st.misc[7]+4, 1);        /* on */
  108.         else if (-2 == eye)
  109.             outp (st.misc[7]+4, 0);        /* off */
  110.         return (0);                /* have shutters */
  111.     } else
  112.         return (1);                /* no shutters */
  113. }
  114.  
  115.  
  116. struct GrDriver NEAR GrVesa = {
  117.     "GrVesa",
  118.     0,
  119.     NULL,    /* extra */
  120.     0,
  121.     GrvInit,
  122.     GrvTerm,
  123.     vMoveTo,
  124.     vDrawTo,
  125.     vSetVisual,
  126.     vSetActive,
  127.     0,    /* GrvClear() too slow */
  128.     vSetWriteMode,
  129.     GrvSetPalette,
  130.     vEllipse,
  131.     0,    /* Flush */
  132.     GrvShutters
  133. };
  134. #undef GRV_STATS
  135. #undef INITED
  136. #undef USECLEAR
  137.